package com.xbongbong.paas.service;

import com.alibaba.fastjson.JSONObject;
import com.xbongbong.paas.toolbox.exception.XbbException;
import com.xbongbong.paas.toolbox.wrap.BaseDTO;
import com.xbongbong.pro.enums.ValueAddedTypeEnum;
import com.xbongbong.pro.packageInfo.pojo.dto.PackageLimitExceededDTO;
import com.xbongbong.pro.packageInfo.pojo.dto.PackageValidDTO;
import com.xbongbong.pro.packageInfo.pojo.vo.PackageLimitExceededVO;
import com.xbongbong.pro.packageInfo.pojo.vo.PackageLimitTipVO;
import com.xbongbong.pro.packageInfo.pojo.vo.PackageValidVO;
import com.xbongbong.pro.enums.ValueAddedTypeEnum;
import com.xbongbong.pro.packageInfo.pojo.dto.BaseInfoDTO;
import com.xbongbong.pro.packageInfo.pojo.dto.SystemCapacityListDTO;
import com.xbongbong.pro.packageInfo.pojo.dto.ValueAddedInfosDTO;
import com.xbongbong.pro.packageInfo.pojo.vo.BaseInfoVO;
import com.xbongbong.pro.packageInfo.pojo.vo.BasePackageInfoVO;
import com.xbongbong.pro.packageInfo.pojo.vo.SystemCapacityListVO;
import com.xbongbong.pro.packageInfo.pojo.vo.ValueAddedInfoVO;
import com.xbongbong.saas.enums.XbbRefTypeEnum;

/**
 * 套餐
 * 创建时间 2019/3/25 5:23 PM
 * 修改时间 2019/3/25 5:28 PM
 * @author chy
 * @since v1.0
 * @version v1.0
 */
public interface PackageService {
    /**
     * 获取基础套餐信息(基础套餐信息冗余在company表中)
     * @param baseInfoDTO
     * @return
     * @throws XbbException
     * 创建时间 2019/4/9 2:37 PM
     * 修改时间 2019/4/9 2:37 PM
     * @author chy
     * @since v1.0
     * @version v1.0
     */
    BaseInfoVO getBasePackageInfo(BaseInfoDTO baseInfoDTO) throws XbbException;

    /**
     * 获取基础套餐到缓存（为最基础的方法）
     * @param
     * @return
     * @throws XbbException
     * 创建时间 2019/4/9 2:37 PM
     * 修改时间 2019/4/9 2:37 PM
     * @author chy
     * @since v1.0
     * @version v1.0
     */
    BasePackageInfoVO getBasePackageInfoFromRedis(String corpid) throws XbbException;

    /**
     * 获取增值套餐信息
     * @param valueAddedInfoDTO
     * @return
     * @throws XbbException
     * 创建时间 2019/4/12 5:00 PM
     * 修改时间 2019/4/12 5:00 PM
     * @author chy
     * @since v1.0
     * @version v1.0
     */
    ValueAddedInfoVO getValueAddedInfos(ValueAddedInfosDTO valueAddedInfoDTO) throws XbbException;


    /**
     * 右上角 我的中的部分套餐信息
     * @param systemCapacityListDTO
     * @return
     * @throws XbbException
     * 创建时间 2019/4/18 7:46 PM
     * 修改时间 2019/4/18 7:46 PM
     * @author chy
     * @since v1.0
     * @version v1.0
     */
    SystemCapacityListVO getSystemCapacityList(SystemCapacityListDTO systemCapacityListDTO) throws XbbException;

    void saveApiValueAdd(String corpid, Long startTime, Long endTime) throws XbbException;

    /**
     * 获取版本类型
     * @param corpid
     * @return
     * @throws XbbException
     */
    Integer getFeeType(String corpid) throws XbbException;

    /**
     * 获取套餐使用量
     * @param corpid
     * @param valueAddedTypeEnum
     * @param xbbRefTypeEnum 获取指定saas业务的单表数据量时，需要传 参照 {@link com.xbongbong.pro.enums.SaasTableCountTypeEnum}
     * @param formId 获取自定义表单的单表数据量时，需要传
     * @return {
     *     "totalValue": 2, // 套餐量
     *     "usedValue": 1, // 使用量
     * @see com.xbongbong.pro.enums.PackageStatusEnum
     *     "status": 1 // 状态
     * }
     * @throws XbbException
     */
    JSONObject getValueAddInfo(String corpid, ValueAddedTypeEnum valueAddedTypeEnum, XbbRefTypeEnum xbbRefTypeEnum, Long formId) throws XbbException;


    /**
     * 套餐校验
     * @param packageValidDTO
     * @return
     * @throws XbbException
     */
    PackageValidVO packageValidate(PackageValidDTO packageValidDTO) throws XbbException;

    /**
     * 套餐超限的信息
     * @param packageLimitExceededDTO
     * @return
     * @throws XbbException
     */
    PackageLimitExceededVO limitExceeded(PackageLimitExceededDTO packageLimitExceededDTO) throws XbbException;

    /**
     * 获取横条的提示
     * @param baseDTO
     * @return
     * @throws XbbException
     */
    PackageLimitTipVO limitTip(BaseDTO baseDTO) throws XbbException;
}
